package Fenetre;

import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.filechooser.FileFilter;

public class FilesChooserPanel extends JPanel implements ActionListener{

	private static final long serialVersionUID = -8184674436488096421L;

	private JList fileChooser_db_liste = null;
	private JTextField fileChooser_info_txt = null;
	private JTextField fileChooser_type_txt = null;

	private JButton fileChooser_db_bt = null;
	private JButton fileChooser_info_bt= null;
	private JButton fileChooser_type_bt = null;

	private File fichierType = null;
	private File fichierInfo = null;
	private File[] fichiersDb = null;

	private DefaultListModel listeFichiersDb = null;

	private int rowHeight=10;
	private int columnWidth=100;

	public FilesChooserPanel(){
		this.setLayout(new GridLayout(3, 2));
		ajouterObjetsGraphiques();
		ajouterListeners();
	}

	public File getFichierType(){
		return fichierType;
	}
	public File getFichierInfo(){
		return fichierInfo;
	}
	public File[] getFichiersDb(){
		return fichiersDb;
	}

	public boolean fichiersRemplis(){
		return fichierType!=null && fichierInfo!=null && fichiersDb!=null;
	}

	private void ajouterObjetsGraphiques(){

		this.add(new JLabel("Fichier info"));
		fileChooser_info_txt = new JTextField();
		fileChooser_info_txt.setEditable(false);
		fileChooser_info_txt.setPreferredSize(new Dimension(columnWidth,rowHeight));
		this.add(fileChooser_info_txt);
		fileChooser_info_bt = new JButton("Parcourir...");
		this.add(fileChooser_info_bt);

		this.add(new JLabel("Fichier type"));
		fileChooser_type_txt = new JTextField();
		fileChooser_type_txt.setEditable(false);
		fileChooser_type_txt.setPreferredSize(new Dimension(columnWidth,rowHeight));
		this.add(fileChooser_type_txt);
		fileChooser_type_bt = new JButton("Parcourir...");
		this.add(fileChooser_type_bt);

		this.add(new JLabel("Fichiers db"));
		listeFichiersDb = new DefaultListModel();
		fileChooser_db_liste = new JList(listeFichiersDb);
		fileChooser_db_liste.setLayoutOrientation(JList.VERTICAL);
		JScrollPane listScroller = new JScrollPane(fileChooser_db_liste);
		listScroller.setPreferredSize(new Dimension(fileChooser_type_txt.getHeight(),fileChooser_type_txt.getWidth()));
		this.add(listScroller);
		fileChooser_db_bt = new JButton("Parcourir...");
		this.add(fileChooser_db_bt);

	}

	private void ajouterListeners(){
		fileChooser_info_bt.addActionListener(this);
		fileChooser_type_bt.addActionListener(this);
		fileChooser_db_bt.addActionListener(this);		
	}

	public void actionPerformed(ActionEvent event) {
		try{
			if(event.getSource() == fileChooser_info_bt){
				fichierInfo = getFile(".info", false)[0];
				if(fichierInfo!=null)
					fileChooser_info_txt.setText(fichierInfo.getName());
			}
			else if(event.getSource() == fileChooser_type_bt){
				fichierType = getFile(".type", false)[0];
				if(fichierType!=null)
					fileChooser_type_txt.setText(fichierType.getName());
			}
			else if(event.getSource() == fileChooser_db_bt){
				fichiersDb = getFile(".db", true);
				if(fichiersDb!=null){
					listeFichiersDb.clear();
					for(File fichier : fichiersDb)
						listeFichiersDb.addElement(fichier.getName());
				}
			}
		}catch(NullPointerException e){ //si on ferme la fenetre

		}

	}

	private File[] getFile(final String extension,boolean multifile){
		JFileChooser fileChooser = new JFileChooser(".");
		if(multifile)
			fileChooser.setMultiSelectionEnabled(multifile);
		fileChooser.setFileFilter(new FileFilter() {
			public boolean accept(File file) {
				if (file.isDirectory())
					return true;
				return (file.getName().endsWith(extension));
			}

			public String getDescription() {
				return extension;
			}
		});

		if ((fileChooser.showOpenDialog(this)) == JFileChooser.APPROVE_OPTION) {
			if(multifile)
				return fileChooser.getSelectedFiles();
			else{
				return new File[]{fileChooser.getSelectedFile()};
			}
		}
		else
			return null;

	}

}
